Projekt Pronal Projekt Pronal

Kazalo:
Sofinasiranje projekta
Starejši - učbenik...
Starejši - zbirka nalog...
Tekmovanja...
Tekmovanja - Parsons...
Tekmovanja - popravi...
Tekmovanja - dopolni
rtk 1988
rtk 1996
rtk 1998
rtk 1999
rtk 2000
rtk 2001
rtk 2002
rtk 2004
rtk 2006
rtk 2007
rtk 2008
rtk 2009
rtk 2013
rtk 2014
rtk 2016
rtk 2017
rtk 2018
rtk 1988

rtk 1988


1988.1.2

1. podnaloga

Naloga

Imamo program, ki naj bi preberal vrstico z nekaj besedami, ki so ločene z enim ali več presledki, in besede izpisal urejene po abecedi.

besede = input('').split()
#####.reverse()
print("#####".join(#####))

Vendar pa programu, kjer je ##### manjka nekaj kode.Dopolni program, da bo prebral vrstico z nekaj besedami, ki so ločene z enim ali več presledki, in bo besede izpiše v obratnem vrstnem redu.

Vhodni podatki

Vrstica z besedilom, ki vsebuje besede ločene z vsaj enim presledkom.

Izhodni podatki

Izpiši eno samo vrstico z obrnjenim vrstnim redom besed.

Primer

Vhod
>>> 'Kako zanimiv    primer!  '
Izhod
'primer! zanimiv Kako'

Uradna rešitev

besede = input('').split()
besede.reverse()
print(" ".join(besede))

1988.2.2

1. podnaloga

Uporabniki nekega programa so se pritožili, da so ukazne besede predolge. Zato želimo vpeljati možnost okrajševanja ukazov. Ukaz dodaj naj bi bilo na primer mogoče okrajšati na dod, doda ali dodaj; ne pa na do (prekratka okrajšava) ali dodamo (napačni znaki v nizu). Okrajšavo opišemo tako, da z zvezdico v modelu ukazne besede označimo, do kam sega obvezni del ukaza; v našem primeru dod*aj. Okrajšan ukaz mora biti dolg najmanj en znak(v modelu ukazne besede zvezdica nikoli ne stoji na prvem mestu).

Naloga

Želeni program že imamo, vendar se je pri shranjevanju nekaj zalomilo in se je koda na mestih, kjer je ##### izbrisala.

model = input('')
preverjalni = input('')
seUjema = True
cezZvezdico = False
zamik = 0 #zvezdico bomo preskočili
i = 0
while seUjema:
    iModel = model[i + zamik]
    iPreverjalni = preverjalni[i]
    if iModel == #####:
        zamik = 1
        iModel = model[i + zamik]
        cezZvezdico = True
    if iPreverjalni == ' ':
        break
    elif iModel != iPreverjalni:
        seUjema = False
    i += #####
print(seUjema ##### cezZvezdico)

Dopolni program tako, da bo program deloval pravlino.

Vhodni podatki

V prvi vrstici je model ukazne besede, ki se konča z vsaj enim presledkom. V drugi vrstici je preverjalni niz, ki se zaključi z vsaj enim presledkom.

Izhodni podatki

Program izpiše True, če prverjalni niz ustreza modelu ukazne besede in False, če ne.

Primer

Vhod
>>> 'abc*de  '
>>> 'abcd '
Izhod
'True'

Uradna rešitev

model = input('')
preverjalni = input('')
seUjema = True
cezZvezdico = False
zamik = 0 #zvezdico bomo preskočili
i = 0
while seUjema:
    iModel = model[i + zamik]
    iPreverjalni = preverjalni[i]
    if iModel == '*':
        zamik = 1
        iModel = model[i + zamik]
        cezZvezdico = True
    if iPreverjalni == ' ':
        break
    elif iModel != iPreverjalni:
        seUjema = False
    i += 1
print(seUjema and cezZvezdico)

1988.3.2

1. podnaloga

Naloga

Imamo program, ki prešteje, kolikokrat se v nekem nizu znakov pojavi nek drug podniz. Pri tem ni nujno, da znaki drugega niza v prvem stoje zaporedoma, ujemati se mora le vrstni red. Vendar pa programu manjka nekaj kode kjer piše #####.

def isciPodniz (niz, podniz):
    '''funkcija poišče kolikokrat se podniz pojavi v nizu'''
    stPojavitev = #####
    if podniz == '':
        stPojavitev += 1
        return stPojavitev
    if niz == '':
        return stPojavitev
    delniPodniz = podniz[0]
    for indeks in range(#####):
        if niz[indeks] == delniPodniz:
            stPojavitev += isciPodniz(niz[indeks + 1:], podniz[1:])
    return #####


vhodni = input('').split()
niz = vhodni[0]
podniz = vhodni[1]
print(isciPodniz(niz, #####))

Dopolni program, da bo program deloval pravilno.

Vhodni podatki

Ena vrstica v kateri sta dana niza ločena s presledkom. Prvi je niz v katerem iščemo, drugi pa je podniz, ki ga iščemo v prvem nizu.

Izhodni podatki

Izpiši eno samo število -- število pojavitev podniza v nizu.

Primer

Vhod
>>> 'matematika mati'
Izhod
4

Uradna rešitev

def isciPodniz (niz, podniz):
    '''funkcija poišče kolikokrat se podniz pojavi v nizu'''
    stPojavitev = 0
    if podniz == '':
        stPojavitev += 1
        return stPojavitev
    if niz == '':
        return stPojavitev
    delniPodniz = podniz[0]
    for indeks in range(len(niz)):
        if niz[indeks] == delniPodniz:
            stPojavitev += isciPodniz(niz[indeks + 1:], podniz[1:])
    return stPojavitev


vhodni = input('').split()
niz = vhodni[0]
podniz = vhodni[1]
print(isciPodniz(niz, podniz))

1988.1.4

1. podnaloga

Naloga (Popravi program)

Imamo funkcijo, ki prešteje popolne kvadrate od 2 do vključno prebranega števila a, vendar funkciji, kjer piše #####, manjka koda.

def funkcija(a):
    d = 0
    for k in range(2, #####):
        p = 1
        q = k/p
        while p < q:
            p += 1
            q = k/p
            if (p == q) and (k%p == 0):
                d += #####
    return d

Dopolni kodo.

Vhodni podatki

Funkcija sprejme en podatek $a$, ki je naravno število večje ali enako od $2$.

Omejitve vhodnih podatkov
  • $2 \leq a$

Izhodni podatki

Funkcija vrne število $d$, ki je enako številu popolnih kvadratov števil med $2$ in $a$.

Primer

Vhod
>>> funkcija(100)
Izhod
9

Uradna rešitev

def funkcija(a):
    d = 0
    for k in range(2, a + 1):
        p = 1
        q = k/p
        while p < q:
            p += 1
            q = k/p
            if (p == q) and (k%p == 0):
                d += 1
    return d
Mesto objave ob koncu projekta 15.9.2018